package com.own.business.resource.core.base;

import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;

/**
 * BaseObjectStoreUtil
 *
 * @author chenxueli
 * @date 2023-07-07 14:18:29
 */
public interface BaseObjectStoreUtil<T> {

    /**
     * 上传单个文件
     *
     * @param file 文件信息
     * @return 文件存储对象信息
     */
    T uploadFile(T file);

    /**
     * 上传单个文件
     *
     * @param file 文件信息
     * @param then 后续处理
     * @return 文件存储对象信息
     */
    default T uploadFile(T file, Consumer<T> then) {
        var vo = uploadFile(file);
        then.accept(vo);
        return vo;
    }

    /**
     * 上传多个文件
     *
     * @param fileList 文件信息列表
     * @return 文件存储对象信息列表
     */
    default List<T> uploadFile(List<T> fileList) {
        return fileList.parallelStream().map(this::uploadFile).collect(Collectors.toList());
    }

    /**
     * 上传多个文件
     *
     * @param fileList 文件信息列表
     * @param then     后续处理
     * @return 文件存储对象信息列表
     */
    default List<T> uploadFile(List<T> fileList, Consumer<List<T>> then) {
        var list = uploadFile(fileList);
        then.accept(list);
        return list;
    }

    /**
     * 验证配置是否正常
     *
     * @return 是否正常
     */
    default boolean check() {
        return true;
    }

    /**
     * 默认的上传路径
     *
     * @return 上传路径
     */
    default String uploadPath() {
        return "";
    }

    /**
     * 文件解冻
     *
     * @param path 文件路径
     * @return 是否成功
     */
    default boolean restore(String path) {
        throw new UnsupportedOperationException("restore");
    }

    /**
     * 最后的上传位置
     *
     * @return 上传位置
     */
    String position();

}
